﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using MakeIT.Deo.Negocios;
using System.Data.Entity;
using System.IO;

namespace MakeIT.Deo.Apresentacao
{
    public partial class CadastroClientePF : System.Web.UI.Page
    {
        usuario usuarioVO = null;

        protected void Page_Load(object sender, EventArgs e)
        {
            usuarioVO = (usuario)this.Session["userActive"];

            if (!IsPostBack)
            {
                Util.HabilitarCampos(false, this.panelCad);
                this.CarregarComboUF();
            }

        }
        private void CarregarComboUF()
        {
            try
            {
                Util.CarregarComboUF(this.ddlCadUF);
            }
            catch (Exception ex)
            {

                throw ex;
            }
        }


        /// <summary>
        /// Manipula o evento do bot&atilde;o btnSalvar
        /// </summary>
        /// <param name="sender">Objeto disparador do evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnSalvar_Click(object sender, EventArgs e)
        {

            try { DateTime.Parse(this.tbNascimento.Text); }
            catch (Exception ex)
            {
                Util.ExibeAlert(this, "Data de nascimento incorreta.");
                return;
            }
            if (this.tbSenha.Text.Trim().Length>0 && !this.tbSenha.Text.Equals(this.tbSenha2.Text))
            {
                Util.ExibeAlert(this, "Senha e confirmação de senha não conferem, digite-as novamente.");
                this.tbSenha.Focus();
                return;
            }
            if (this.tbSenha.Text.Trim().Length>0 && this.tbSenha.Text.Trim().Length < 5)
            {
                Util.ExibeAlert(this, "Senha muito curta, deve ter no minimo 5 letras e/ou números.");
                this.tbSenha.Focus();
                return;
            }

            //Declara objetos
            cliente clienteVO = null;
            ClienteBO clienteBO = null;
            bool novoRegistro = false;

            try
            {
                //Cria objeto
                clienteBO = new ClienteBO();

                //Verifica se o ID é nulo, se sim = cadastro novo
                if (string.IsNullOrEmpty(this.txtCadId.Text))
                {
                    clienteVO = new cliente();
                    clienteVO.Cadastro = DateTime.Now;
                    clienteVO.CadastradoPor = usuarioVO.User;

                    novoRegistro = true;

                }
                //Recupera dados para serem alterados
                else
                {
                    //Recupera dados
                    clienteVO = clienteBO.RecuperaCliente(Int32.Parse(this.txtCadId.Text));

                }

                clienteVO.Tipo = "PF";
                clienteVO.Ativo = this.ckbAtivo.Checked;
                clienteVO.MalaDireta = this.rblMalaDireta.SelectedValue.Equals("Sim");
                clienteVO.Sexo = this.rblSexo.SelectedValue;
                clienteVO.Nome = this.tbNome.Text;
                clienteVO.Sobrenome = this.tbSobrenome.Text;
                clienteVO.Nasc = DateTime.Parse(this.tbNascimento.Text);
                clienteVO.Email = this.tbMail.Text;
                clienteVO.Endereco = this.tbEnd.Text;
                clienteVO.EnderNum = this.tbNumero.Text;
                clienteVO.EnderCompl = this.tbCompl.Text;
                clienteVO.Bairro = this.tbBairro.Text;
                clienteVO.Cidade = this.tbCid.Text;
                clienteVO.Estado = this.ddlCadUF.SelectedValue;
                clienteVO.CEP = this.tbCEP.Text;
                clienteVO.CPF = this.tbCPF.Text;
                clienteVO.RG = this.tbRG.Text;
                clienteVO.FoneCel = this.tbCel.Text;
                clienteVO.FoneRes = this.tbFone.Text;
                clienteVO.User = this.tbUser.Text;

                if (this.tbSenha.Text.Trim().Length > 0)
                    clienteVO.Pass = this.tbSenha.Text;
                
                clienteVO.Edicao = DateTime.Now;
                clienteVO.EditadoPor = usuarioVO.User;

                //Chama metodo para salvar ou criar novo registro
                clienteBO.SalvarCliente(clienteVO, novoRegistro);

                // Exibe msg de sucesso ao salvar registro
                Util.ExibeAlert(this, "Registro salvo com sucesso!");

                //Popula grid atualizado
                this.btnPesquisa_Click(null, null);

                //Limpa formulario, apos salvar os dados
                Util.LimparCampos(this.panelCad);
                this.ltCadastradoPor.Text = "";
                this.ltEditadoPor.Text = "";
                this.ltDataCadastro.Text = "";
                this.ltDataEdicao.Text = "";

                // Trava bot&atilde;o de edi&ccedil;&atilde;o
                this.btnEditar.Enabled = false;

                // Trava bot&atilde;o de exclusao
                this.btnExcluir.Enabled = false;

                // Desabilita o bot&atilde;o salvar
                this.btnSalvar.Enabled = false;

                // Habilida o botao novo
                this.btnNovo.Enabled = true;

                Util.HabilitarCampos(false, this.panelCad);

            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

        /// <summary>
        /// Manipula o evento do bot&atilde;o btnPesquisa
        /// </summary>
        /// <param name="sender">Objeto disparador do evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnPesquisa_Click(object sender, EventArgs e)
        {

            //Declara objetos
            int? idCliente = null;
            string nome = null;

            try
            {
                if (!string.IsNullOrEmpty(this.txtId.Text))
                {
                    idCliente = Int32.Parse(this.txtId.Text);
                }

                if (!string.IsNullOrEmpty(this.txtNome.Text))
                {
                    nome = this.txtNome.Text;
                }

                //
                this.grvResultado.DataSource = new ClienteBO().RecuperaCliente(idCliente, nome, null, null, false, "PF");

                //Vincula os dados
                this.grvResultado.DataBind();
            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

        /// <summary>
        /// Manipula o evento do bot&atilde;o btnCancelar
        /// </summary>
        /// <param name="sender">Objeto disparador do evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            this.tabCliente.ActiveTabIndex = 0;

            // Desabilita os campos para edi&ccedil;&atilde;o
            Util.HabilitarCampos(false, this.panelCad);

            // Destrava bot&atilde;o de edi&ccedil;&atilde;o
            this.btnEditar.Enabled = !string.IsNullOrEmpty(this.txtCadId.Text);

            // Detrava bot&atilde;o de exclusao
            this.btnExcluir.Enabled = !string.IsNullOrEmpty(this.txtCadId.Text);

            // Detrava bot&atilde;o de novo
            this.btnNovo.Enabled = true;

            // Desabilita o bot&atilde;o salvar
            this.btnSalvar.Enabled = false;

        }

        protected void imgbVisualizar_Click(object sender, ImageClickEventArgs e)
        {
            // Declara objetos
            ClienteBO clienteBO = null;
            cliente clienteVO = null;
            int idCliente = 0;

            try
            {
                // cria objeto
                clienteBO = new ClienteBO();

                //
                idCliente = int.Parse(((ImageButton)sender).CommandArgument);

                //
                clienteVO = clienteBO.RecuperaCliente(idCliente); ;

                this.txtCadId.Text = idCliente.ToString();

                this.ddlCadUF.SelectedValue = clienteVO.Estado;
                this.rblMalaDireta.SelectedValue = (clienteVO.MalaDireta.Value ? "Sim" : "Nao");
                this.rblSexo.SelectedValue = clienteVO.Sexo;
                this.tbBairro.Text = clienteVO.Bairro;
                this.tbCel.Text = clienteVO.FoneCel;
                this.tbCEP.Text = clienteVO.CEP;
                this.tbCid.Text = clienteVO.Cidade;
                this.tbCompl.Text = clienteVO.EnderCompl;
                this.tbCPF.Text = clienteVO.CPF;
                this.tbEnd.Text = clienteVO.Endereco;
                this.tbFone.Text = clienteVO.FoneRes;
                this.tbMail.Text = clienteVO.Email;
                this.tbNascimento.Text = clienteVO.Nasc.Value.ToShortDateString();
                this.tbNome.Text = clienteVO.Nome;
                this.tbNumero.Text = clienteVO.EnderNum;
                this.tbRG.Text = clienteVO.RG;
                this.tbSobrenome.Text = clienteVO.Sobrenome;
                this.tbUser.Text = clienteVO.User;

                this.ckbAtivo.Checked = (clienteVO.Ativo != null ? (bool)clienteVO.Ativo : false);

                this.ltCadastradoPor.Text = clienteVO.CadastradoPor;
                this.ltEditadoPor.Text = clienteVO.EditadoPor;
                this.ltDataCadastro.Text = ((DateTime)clienteVO.Cadastro).ToString();
                this.ltDataEdicao.Text = (clienteVO.Edicao == null ? "" : ((DateTime)clienteVO.Edicao).ToString());

                //
                this.tabCliente.ActiveTabIndex = 1;

                //
                Util.HabilitarCampos(false, this.panelCad);

                //
                this.btnSalvar.Enabled = false;

                //
                this.btnEditar.Enabled = true;

                //
                this.btnExcluir.Enabled = true;

                //
                this.btnNovo.Enabled = true;

            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

        /// <summary>
        /// Manipula o evento editar do web form
        /// </summary>
        /// <param name="sender">Objeto disparador de evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnEditar_Click(object sender, EventArgs e)
        {
            // Habilita os campos para edi&ccedil;&atilde;o
            Util.HabilitarCampos(true, this.panelCad);

            // Trava apenas o text box do ID
            this.txtCadId.Enabled = false;

            // Trava bot&atilde;o de edi&ccedil;&atilde;o
            this.btnEditar.Enabled = false;

            // Trava bot&atilde;o de exclusao
            this.btnExcluir.Enabled = false;

            // Trava bot&atilde;o de novo
            this.btnNovo.Enabled = false;

            // Habilita o bot&atilde;o salvar
            this.btnSalvar.Enabled = true;

            this.tbNome.Focus();

        }

        protected void btnNovo_Click(object sender, EventArgs e)
        {
            //Limpa formulario, para a entrada de novo registro
            Util.LimparCampos(this.panelCad);
            this.ltCadastradoPor.Text = "";
            this.ltEditadoPor.Text = "";
            this.ltDataCadastro.Text = "";
            this.ltDataEdicao.Text = "";

            // Habilita os campos para edi&ccedil;&atilde;o
            Util.HabilitarCampos(true, this.panelCad);

            // Trava apenas o text box do ID
            this.txtCadId.Enabled = false;

            // Trava bot&atilde;o de edi&ccedil;&atilde;o
            this.btnEditar.Enabled = false;

            // Trava bot&atilde;o de exclusao
            this.btnExcluir.Enabled = false;

            // Trava bot&atilde;o de novo
            this.btnNovo.Enabled = false;

            // Habilita o bot&atilde;o salvar
            this.btnSalvar.Enabled = true;

            this.tbNome.Focus();

        }

        protected void btnExcluir_Click(object sender, EventArgs e)
        {
            //Declara objetos
            cliente clienteVO = null;
            ClienteBO clienteBO = null;

            try
            {
                //Cria objeto
                clienteBO = new ClienteBO();
                clienteVO = new cliente();

                clienteVO.IdCliente = Int32.Parse(this.txtCadId.Text);

                //Chama metodo para salvar ou criar novo registro
                clienteBO.DeletaCliente(clienteVO);

                // Exibe msg de sucesso ao salvar registro
                Util.ExibeAlert(this, "Registro excluido com sucesso!");

                //Popula grid atualizado
                this.btnPesquisa_Click(null, null);

                //Limpa formulario, apos salvar os dados
                Util.LimparCampos(this.panelCad);
                this.ltCadastradoPor.Text = "";
                this.ltEditadoPor.Text = "";
                this.ltDataCadastro.Text = "";
                this.ltDataEdicao.Text = "";


                // Trava bot&atilde;o de edi&ccedil;&atilde;o
                this.btnEditar.Enabled = false;

                // Trava bot&atilde;o de exclusao
                this.btnExcluir.Enabled = false;

                // Desabilita o bot&atilde;o salvar
                this.btnSalvar.Enabled = false;

                // Habilida o botao novo
                this.btnNovo.Enabled = true;

            }
            catch (Exception ex)
            {

                throw ex;
            }
            
        }
    }
}
